<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

/**
 * Projeto Interdiciplinar
 * Gurpo 1 - Primeira turma do curso de Aux Info da Escom Brasília
 * Criado em: 21/11/2012, 09:30:21
 * Description of m_parte
 *
 *  * @author 2 Sgt Lemoel, 
 *         3 Sgt Albuquerque,
 *         3 Sgt Azambuja,
 *         3 Fabio Moura
 * @since 11/2012
 * @version 1
 */
class M_Parte extends CI_Model {

    function __construct() {
        parent::__construct();
        $this->_tabela = 'PARTE';
    }

    public function gravarParte($dados) {
        
        $return = $this->insert($dados);

        if ($return == TRUE) {
            $this->session->set_userdata('parteId', $this->db->insert_id());
            $this->m_tools->gravaLog('Criou um documento com sucesso');
        } else {
            $this->m_tools->gravaLog('Erro ao gerar o documento');
        }
        return $return;
    }

    public function listaParte() {

        $idtLogado = $this->session->userdata('idt');

        $sql = "SELECT P.ID,
                    P.`CMT_GDA_IDT`,
                    P.`OF_DIA_IDT`,
                    P.`ADJ_IDT`,
                    P.DESPACHO,

                    UGDA.`NOME_GUERRA` NOME_CMT_GDA,
                    PGGDA.`PST_GRAD_SIGLA` GRAD_CMT_GDA,

                    UADJ.`NOME_GUERRA` NOME_ADJUNTO,
                    PGADJ.`PST_GRAD_SIGLA` GRAD_ADJUNTO,

                    UOFDIA.`NOME_GUERRA` NOME_OF_DE_DIA,
                    PGOFDIA.`PST_GRAD_SIGLA` PST_OF_DE_DIA,

                    DATE_FORMAT(P.`DT_HORA_INICIO`, '%d/%m/%Y %H:%i:%s') DATA_INICIO,
                    DATE_FORMAT(P.`DT_HORA_FIM`, '%d/%m/%Y %H:%i:%s') DATA_FIM,
                   
                    P.STATUS
             FROM PARTE P

                 INNER JOIN USUARIO UGDA ON UGDA.`IDT` = P.`CMT_GDA_IDT`
                 INNER JOIN USUARIO UOFDIA ON UOFDIA.`IDT` = P.`OF_DIA_IDT`
                 INNER JOIN USUARIO UADJ ON UADJ.`IDT` = P.`ADJ_IDT`

                 INNER JOIN PST_GRAD PGGDA ON PGGDA.`ID` = UGDA.`PST_GRAD_ID`
                 INNER JOIN PST_GRAD PGOFDIA ON PGOFDIA.`ID` = UOFDIA.`PST_GRAD_ID`
                 INNER JOIN PST_GRAD PGADJ ON PGADJ.`ID` = UADJ.`PST_GRAD_ID`
             
             WHERE P.`CMT_GDA_IDT` = ? 
                   OR P.`OF_DIA_IDT` = ?
                   OR P.`ADJ_IDT` =  ?
            ";

        return $this->db->query($sql, array($idtLogado, $idtLogado, $idtLogado));
    }

    public function listaTodasAsParte() {

        $perfil = $this->session->userdata('perfilId');

        $array = array(Cmt, SubCmt, S2);
        if (in_array($perfil, $array)) {
            
            $sql = "SELECT P.ID,
                          P.`CMT_GDA_IDT`,
                          P.`OF_DIA_IDT`,
                          P.`ADJ_IDT`,
                          P.DESPACHO,

                          UGDA.`NOME_GUERRA` NOME_CMT_GDA,
                          PGGDA.`PST_GRAD_SIGLA` GRAD_CMT_GDA,

                          UADJ.`NOME_GUERRA` NOME_ADJUNTO,
                          PGADJ.`PST_GRAD_SIGLA` GRAD_ADJUNTO,

                          UOFDIA.`NOME_GUERRA` NOME_OF_DE_DIA,
                          PGOFDIA.`PST_GRAD_SIGLA` PST_OF_DE_DIA,

                          DATE_FORMAT(P.`DT_HORA_INICIO`, '%d/%m/%Y %H:%i:%s') DATA_INICIO,
                          DATE_FORMAT(P.`DT_HORA_FIM`, '%d/%m/%Y %H:%i:%s') DATA_FIM,

                          P.STATUS
                   FROM PARTE P

                       INNER JOIN USUARIO UGDA ON UGDA.`IDT` = P.`CMT_GDA_IDT`
                       INNER JOIN USUARIO UOFDIA ON UOFDIA.`IDT` = P.`OF_DIA_IDT`
                       INNER JOIN USUARIO UADJ ON UADJ.`IDT` = P.`ADJ_IDT`

                       INNER JOIN PST_GRAD PGGDA ON PGGDA.`ID` = UGDA.`PST_GRAD_ID`
                       INNER JOIN PST_GRAD PGOFDIA ON PGOFDIA.`ID` = UOFDIA.`PST_GRAD_ID`
                       INNER JOIN PST_GRAD PGADJ ON PGADJ.`ID` = UADJ.`PST_GRAD_ID`

                  ";
            return $this->db->query($sql);
        } else {
            return FALSE;
        }
    }

    public function getDataInicio($idParte) {
        $arrayCol[] = "DATE_FORMAT(DT_HORA_INICIO, '%d/%m/%Y as %H:%i:%s') DATA_HORA_INICIO";
        $where = ' ID = ' . $idParte;
        return $this->select($arrayCol, $where);
    }

    /*
     * Verifica de o cmt da gda já cadastrou um documento 
     * neste Sv.
     */

    public function isSetParte() {

        $parteId = trim($this->session->userdata('parteId'));

        if (empty($parteId)) {

            /* Verificar no banco de não existe alguma parte cadastrada
             * por este militar no dia de hoje ou ontem
             * com data_fim null && status do cmt gda
             * Gravar na session o id 
             * Existe parte ? sim existe return true.
             */

            $resultado = $this->virificaDocParaOSv();
            $numRows = $resultado->num_rows();

            if ($numRows > 0) {
                $this->session->set_userdata('parteId', $resultado->row()->ID);
                return TRUE;
            } else {
                /**
                 * Se acesso ao banco não retornar um documento permitir criar um novo documento
                 * EXISTE PARTE/DOCUMENTO ? NAO ENTAO return FALSE;
                 * return FALSE
                 */
                return FALSE;
            }
        } else {
            /*
             * Mostrar uma mensagem dizendo
             * O Sr já cadastrou um documento para este SV.
             * Use a função de remover para depois criar outro documento.
             * Mostrar a relação de documentos
             * Existe um parte ? sim return TRUE.
             * return TRUE
             */
            return TRUE;
        }
    }

    private function virificaDocParaOSv() {

        $dia = date('d');
        $mes = date('m');
        $ano = date('Y');
        $ontem = (int) $dia - 1;

        $idt = $this->session->userdata('idt');

        $sql = "SELECT P.`ID`
                FROM PARTE P
                WHERE P.`CMT_GDA_IDT` = ?
                    AND P.`STATUS` IN (1,2)
                    AND P.`DT_HORA_FIM` IS NULL
                    AND (DATE_FORMAT(P.`DT_HORA_INICIO`,'%d') = ? OR DATE_FORMAT(P.`DT_HORA_INICIO`,'%d') = ?)
                    AND DATE_FORMAT(P.`DT_HORA_INICIO`,'%m') = ?
                    AND DATE_FORMAT(P.`DT_HORA_INICIO`,'%Y') = ? ";

        return $this->db->query($sql, array($idt, $dia, $ontem, $mes, $ano));
    }

    public function getStatus($docId) {

        $col = array('STATUS');
        $where = 'ID = ' . $docId;
        return $this->select($col, $where);
    }

    public function preparaColunaDeStatus($statusId, $parteCrypt) {

        $perfil = $this->session->userdata('perfilId');
        $perfilParametro = "'".$perfil."'";
        
        $img = NULL;
        
//        $perfil = S2;
//        $statusId = 9;
        switch ($statusId) {
            case 1:
                if ($perfil == CmtGda) {
                    $img = '<a href="#" onclick = "viewDocumento(' . $parteCrypt . ')"><span class="ui-icon ui-icon-circle-zoomout" title="Visualizar dados do documento"></span></a>';
                    $img .= '<a href="#" onclick = "enviarDocumento(' . $parteCrypt . ')"><span class="ui-icon ui-icon-circle-arrow-e" title="Enviar Documento para Adj"></span></a>';
                } else {
                    $img = '<a href="#" onclick = "viewDocumento(' . $parteCrypt . ')"><span class="ui-icon ui-icon-circle-zoomout" title="Visualizar dados do documento"></span></a>';
                }

                break;
            case 2:
                if ($perfil == CmtGda) {
                    $img = '<a href="#" onclick = "viewDocumento(' . $parteCrypt . ')"><span class="ui-icon ui-icon-circle-zoomout" title="Visualizar dados do documento"></span></a>';
                    $img .= '<a href="#" onclick = "enviarDocumento(' . $parteCrypt . ')"><span class="ui-icon ui-icon-circle-arrow-e" title="Enviar Documento ao Adj"></span></a>';

                } else {
                    $img = '<a href="#" onclick = "viewDocumento(' . $parteCrypt . ')"><span class="ui-icon ui-icon-circle-zoomout" title="Visualizar dados do documento"></span></a>';
                }

                break;
            case 3:
                if ($perfil == Adj) {
                    $img = '<a href="#" onclick = "viewDocumento(' . $parteCrypt . ')"><span class="ui-icon ui-icon-circle-zoomout" title="Visualizar dados do documento"></span></a>';
                    $img .= '<a href="#" onclick = "enviarDocumento(' . $parteCrypt . ')"><span class="ui-icon ui-icon-circle-arrow-e" title="Enviar Documento ao Of de Dia"></span></a>';
                    $img .= '<a href="#" onclick = "devolverDocumento(' . $parteCrypt . ')"><span class="ui-icon ui-icon-circle-arrow-w" title="Devolver documento ao Cmt Gda"></span></a>';
                  
                } else {
                   $img = '<a href="#" onclick = "viewDocumento(' . $parteCrypt . ')"><span class="ui-icon ui-icon-circle-zoomout" title="Visualizar dados do documento"></span></a>';
                }

                break;
            case 4:
                if ($perfil == Adj) {
                    $img = '<a href="#" onclick = "viewDocumento(' . $parteCrypt . ')"><span class="ui-icon ui-icon-circle-zoomout" title="Visualizar dados do documento"></span></a>';
                    $img .= '<a href="#" onclick = "enviarDocumento(' . $parteCrypt . ')"><span class="ui-icon ui-icon-circle-arrow-e" title="Enviar Documento ao Of de Dia"></span></a>';
                    $img .= '<a href="#" onclick = "devolverDocumento(' . $parteCrypt . ')"><span class="ui-icon ui-icon-circle-arrow-w" title="Devolver documento ao Cmt Gda"></span></a>';
                    
                } else {
                   $img = '<a href="#" onclick = "viewDocumento(' . $parteCrypt . ')"><span class="ui-icon ui-icon-circle-zoomout" title="Visualizar dados do documento"></span></a>';
                }

                break;
            case 5:
                if ($perfil == OfDeDia) {
                    $img = '<a href="#" onclick = "viewDocumento(' . $parteCrypt . ')"><span class="ui-icon ui-icon-circle-zoomout" title="Visualizar dados do documento"></span></a>';
                    $img .= '<a href="#" onclick = "enviarDocumento(' . $parteCrypt . ')"><span class="ui-icon ui-icon-circle-arrow-e" title="Enviar Documento ao SCmt"></span></a>';
                    $img .= '<a href="#" onclick = "devolverDocumento(' . $parteCrypt . ')"><span class="ui-icon ui-icon-circle-arrow-w" title="Devolver documento ao Adj"></span></a>';

                } else {
                    $img = '<a href="#" onclick = "viewDocumento(' . $parteCrypt . ')"><span class="ui-icon ui-icon-circle-zoomout" title="Visualizar dados do documento"></span></a>';
                }
                break;

            case 6:
                if ($perfil == OfDeDia) {
                    $img = '<a href="#" onclick = "viewDocumento(' . $parteCrypt . ')"><span class="ui-icon ui-icon-circle-zoomout" title="Visualizar dados do documento"></span></a>';
                    $img .= '<a href="#" onclick = "enviarDocumento(' . $parteCrypt . ')"><span class="ui-icon ui-icon-circle-arrow-e" title="Enviar Documento ao SCmt"></span></a>';
                    $img .= '<a href="#" onclick = "devolverDocumento(' . $parteCrypt . ')"><span class="ui-icon ui-icon-circle-arrow-w" title="Devolver o documento ao Adj"></span></a>';

                } else {
                    $img = '<a href="#" onclick = "viewDocumento(' . $parteCrypt . ')"><span class="ui-icon ui-icon-circle-zoomout" title="Visualizar dados do documento"></span></a>';
                }
                break;

            case 7:
                if ($perfil == SubCmt) {
                    $img = '<a href="#" onclick = "viewDocumento(' . $parteCrypt . ')"><span class="ui-icon ui-icon-circle-zoomout" title="Visualizar dados do documento"></span></a>';
                    $img .= '<a href="#" onclick = "enviarDocumento(' . $parteCrypt . ','.$perfilParametro.')"><span class="ui-icon ui-icon-circle-arrow-e" title="Enviar Documento ao S2"></span></a>';
                    $img .= '<a href="#" onclick = "devolverDocumento(' . $parteCrypt . ')"><span class="ui-icon ui-icon-circle-arrow-w" title="Devolver o documento ao Of de Dia"></span></a>';
                    
                } else {
                    $img = '<a href="#" onclick = "viewDocumento(' . $parteCrypt . ')"><span class="ui-icon ui-icon-circle-zoomout" title="Visualizar dados do documento"></span></a>';
                }
                break;

            case 8:
                if ($perfil == SubCmt) {
                    $img = '<a href="#" onclick = "viewDocumento(' . $parteCrypt . ')"><span class="ui-icon ui-icon-circle-zoomout" title="Visualizar dados do documento"></span></a>';
                    $img .= '<a href="#" onclick = "enviarDocumento(' . $parteCrypt . ','.$perfilParametro.')"><span class="ui-icon ui-icon-circle-arrow-e" title="Enviar Documento para S2"></span></a>';
                    $img .= '<a href="#" onclick = "devolverDocumento(' . $parteCrypt . ')"><span class="ui-icon ui-icon-circle-arrow-w" title="Devolver Documento para Adj"></span></a>';
                    
                } else {
                    $img = '<a href="#" onclick = "viewDocumento(' . $parteCrypt . ')"><span class="ui-icon ui-icon-circle-zoomout" title="Visualizar dados do documento"></span></a>';
                }
                break;

            case 9:
                if ($perfil == S2) {
                    $img  = '<a href="#" onclick = "viewDocumento(' . $parteCrypt . ')"><span class="ui-icon ui-icon-circle-zoomout" title="Visualizar dados do documento"></span></a>';
                    $img .= '<a href="#" onclick = "devolverDocumento(' . $parteCrypt . ')"><span class="ui-icon ui-icon-circle-arrow-w" title="Devolver ao SCmt"></span></a>';
                    $img .= '<a href="#" onclick = "arquivarDocumento(' . $parteCrypt . ')"><span class="ui-icon ui-icon-folder-collapsed" title="Arquivar o Documento"></span></a>';
                    
                } else {
                    $img = '<a href="#" onclick = "viewDocumento(' . $parteCrypt . ')"><span class="ui-icon ui-icon-circle-zoomout" title="Visualizar dados do documento"></span></a>';
                }
                break;
                
            case 100:
                    $img  = '<a href="#" onclick = "viewDocumento(' . $parteCrypt . ')"><span class="ui-icon ui-icon-circle-zoomout" title="Visualizar dados do documento"></span></a>';
                    return $img;
                break;

            default:
                break;
        }
        return $img;
    }

    public function alteraStatusDoc($novoStatusId, $parteId) {

        $dados = array('STATUS' => $novoStatusId);
        $where = ' ID = ' . $parteId;

        $retorno = $this->update($dados, $where);

        if ($retorno === TRUE) {
            $this->m_tools->gravaLog('Trocou status do documentos para ' . $novoStatusId, $parteId);
            $this->session->unset_userdata('parteId');
            return TRUE;
        } else if ($retorno === FALSE) {
            $this->m_tools->gravaLog('Erro no envio do documento para ' . $novoStatusId, $parteId);
            return FALSE;
        }
    }
    
    public function validaEnvioDocumento($idDocumento) {

        $perfil = $this->session->userdata('perfilId');

        (int)$idStatusDoc = $this->getStatus($idDocumento)->row()->STATUS;

        switch ($idStatusDoc) {
            case 1: 
                
                if ($perfil == CmtGda) {
                    return $this->alteraStatusDoc(3,$idDocumento);
                } else {
                    return FALSE;
                }

                break;
                
            case 2: 
                
                if ($perfil == CmtGda) {
                    return $this->alteraStatusDoc(3,$idDocumento);
                } else {
                    return FALSE;
                }

                break;
                
            case 3: 
                
                if ($perfil == Adj) {
                    return $this->alteraStatusDoc(5,$idDocumento);
                } else {
                    return FALSE;
                }

                break;
                
            case 4: 
                
                if ($perfil == Adj) {
                    return $this->alteraStatusDoc(5,$idDocumento);
                } else {
                    return FALSE;
                }

                break;
            case 5: 
                
                if ($perfil == OfDeDia) {
                    return $this->alteraStatusDoc(7,$idDocumento);
                } else {
                    return FALSE;
                }

                break;
            case 6: 
                
                if ($perfil == OfDeDia) {
                    return $this->alteraStatusDoc(7,$idDocumento);
                } else {
                    return FALSE;
                }

                break;
                
            case 7: 
                
                if ($perfil == SubCmt) {
                    return $this->alteraStatusDoc(9,$idDocumento);
                } else {
                    return FALSE;
                }

                break;
                
            case 8: 
                
                if ($perfil == SubCmt) {
                    return $this->alteraStatusDoc(9,$idDocumento);
                } else {
                    return FALSE;
                }

                break;
        
            default:
                break;
        }
    }
    
    
    public function validaDevolucaoDocumento($idDocumento) {

        $perfil = $this->session->userdata('perfilId');

        (int)$idStatusDoc = $this->getStatus($idDocumento)->row()->STATUS;

        switch ($idStatusDoc) {
            case 3: 
                
                if ($perfil == Adj) {
                    return $this->alteraStatusDoc(2,$idDocumento);
                } else {
                    return FALSE;
                }

                break;
                
            case 4: 
                
                if ($perfil == Adj) {
                    return $this->alteraStatusDoc(2,$idDocumento);
                } else {
                    return FALSE;
                }

                break;
            case 5: 
                
                if ($perfil == OfDeDia) {
                    return $this->alteraStatusDoc(4,$idDocumento);
                } else {
                    return FALSE;
                }

                break;
            case 6: 
                
                if ($perfil == OfDeDia) {
                    return $this->alteraStatusDoc(4,$idDocumento);
                } else {
                    return FALSE;
                }

                break;
                
            case 7: 
                
                if ($perfil == SubCmt) {
                    return $this->alteraStatusDoc(6,$idDocumento);
                } else {
                    return FALSE;
                }

                break;
                
            case 8: 
                
                if ($perfil == SubCmt) {
                    return $this->alteraStatusDoc(6,$idDocumento);
                } else {
                    return FALSE;
                }

                break;
                
            case 9:
                
                if ($perfil == S2) {
                    return $this->alteraStatusDoc(8,$idDocumento);
                } else {
                    return FALSE;
                }

                break;
        
            default:
                break;
        }
    }
    
    public function gravaDespacho($despacho,$parteId) {
        $dados = array('DESPACHO' => $despacho);
        $where = ' ID = '.$parteId;
        return $this->update($dados, $where);
    }
    
    public function getDespacho($parteId) {
        
        $sql = "SELECT DESPACHO FROM PARTE WHERE ID = $parteId ";
        return $this->db->query($sql);
    }
}

?>